package com.obelisco.vista.seguridad;

import java.io.Serializable;

import ucla.encuestaMatic.vista.componentes.VentanaTransaccionEncuestaMatic;

import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Window;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.modelo.data.Transaccion;
import com.obelisco.modelo.data.Usuario;
import com.obelisco.modelo.servicios.seguridad.IServicioAdministrarBitacora;
import com.obelisco.modelo.servicios.seguridad.IServicioSeguridad;
import com.obelisco.vista.componentes.DialogoError;
import com.obelisco.vista.componentes.IVentana;
import com.obelisco.vista.componentes.Ventana;
import com.obelisco.vista.controles.*;
import com.obelisco.vista.herramientas.ContextoAplicacion;
import com.obelisco.vista.herramientas.IVentanaFactory;
import com.obelisco.vista.inicio.Aplicacion;
import com.obelisco.vista.plantillas.VentanaBase;

/**
 * An Echo2 user interface to the application.
 * 
 * @author Karl Stenerud
 */
public class SeguridadUI {
	
	private IVentanaFactory ventanaFactory;

	private int ancho = 800;

	private int alto = 600;

	private Component contenedor;

	private IVentana actual;
	
	private IServicioSeguridad servicioSeguridad;
	
	private IServicioAdministrarBitacora servicioAdministrarBitacora;

	public IServicioSeguridad getServicioSeguridad() {
		return servicioSeguridad;
	}

	public void setServicioSeguridad(IServicioSeguridad servicioSeguridad) {
		this.servicioSeguridad = servicioSeguridad;
	}

	public SeguridadUI() {
		super();
	}

	public void mostrarTransaccion(Transaccion transaccion) {
			IVentana ventana = ventanaFactory.crearVentana(transaccion.getSpring());
			if (ventana == null) {
				throw new ObeliscoException("El Nombre Spring NO Existe");
			}

			this.actual = ventana;

			
			if (ventana instanceof VentanaBase) {
				VentanaBase ventanaBase = (VentanaBase) ventana;
				ventanaBase.setTextoAyuda(transaccion.getAyuda());
				ventanaBase.setFunciones(transaccion.getOperaciones());
			}
			
			if (ventana instanceof VentanaTransaccionEncuestaMatic) {
				VentanaTransaccionEncuestaMatic ventanaTransaccionEncuestaMatic = (VentanaTransaccionEncuestaMatic)ventana;				
				ventanaTransaccionEncuestaMatic.setEncuesta(transaccion.getEncuesta());
			}
			
			if (ventana instanceof Ventana) {
				Ventana v = (Ventana) ventana;
				if (v.isIncrustado()) {
					this.actual.mostrar(contenedor);
				} else {
					this.actual.mostrarDialogo(contenedor, v.getAncho(), v
							.getAlto());
				}
			}

	}
	
	public void mostrarTransaccion(Usuario usuario,Transaccion transaccion) {
		
		if (servicioSeguridad.tienePermiso(usuario, transaccion)) {			
			mostrarTransaccion(transaccion);
			servicioAdministrarBitacora.registrarEjecucion(usuario, transaccion);
		} else {
			throw new ObeliscoException("El Usuario NO tiene Permiso para Ejecutar la Transaccion!!!");
		}
		
	}
	

	public IVentanaFactory getVentanaFactory() {
		return ventanaFactory;
	}

	public void setVentanaFactory(IVentanaFactory ventanaFactory) {
		this.ventanaFactory = ventanaFactory;
	}

	public int getAlto() {
		return alto;
	}

	public void setAlto(int alto) {
		this.alto = alto;
	}

	public int getAncho() {
		return ancho;
	}

	public void setAncho(int ancho) {
		this.ancho = ancho;
	}

	public Component getContenedor() {
		return contenedor;
	}

	public void setContenedor(Component contenedor) {
		this.contenedor = contenedor;
	}

	public IServicioAdministrarBitacora getServicioAdministrarBitacora() {
		return servicioAdministrarBitacora;
	}

	public void setServicioAdministrarBitacora(
			IServicioAdministrarBitacora servicioAdministrarBitacora) {
		this.servicioAdministrarBitacora = servicioAdministrarBitacora;
	}

}
